5 import java
.util
.ArrayList
;
6 import java
.util
.Observable
;
7 import java
.util
.Observer
;
8 import java
.util
.Scanner
;
11 public class GraphModel
extends Observable
implements Observer
{
12 private List
<GraphEdge
> edges
;
13 private List
<GraphVertex
> vertexes
;
16 public GraphVertex
[] getVertexes(){
17 GraphVertex
[] a
= new GraphVertex
[vertexes
.size()];
18 return vertexes
.toArray(a
);
20 public GraphEdge
[] getEdges(){
21 GraphEdge
[] a
= new GraphEdge
[edges
.size()];
22 return edges
.toArray(a
);
26 edges
= new ArrayList
<GraphEdge
>();
27 vertexes
= new ArrayList
<GraphVertex
>();
30 public synchronized void setChanged() {
35 public void addEdge(GraphEdge
... edge
){
36 for(int i
=0; i
< edge
.length
; i
++){
38 edge
[i
].addObserver(this);
43 public void addGraph(GraphVertex
... vertex
){
44 for(int i
=0; i
< vertex
.length
; i
++){
45 vertexes
.add(vertex
[i
]);
46 vertex
[i
].addObserver(this);
51 public void removeEdge(GraphEdge
... edge
){
52 for(int i
=0; i
< edge
.length
; i
++){
53 edges
.remove(edge
[i
]);
54 edge
[i
].deleteObserver(this);
58 public void removeGraph(GraphVertex
... vertex
){
59 for(int i
=0; i
< vertex
.length
; i
++){
60 vertexes
.remove(vertex
[i
]);
61 vertex
[i
].deleteObserver(this);
66 public GraphVertex
getGraphByCoordinate(int x
, int y
){
67 for(int i
=0; i
< vertexes
.size(); i
++){
68 if(vertexes
.get(i
).isAt(x
, y
))
69 return vertexes
.get(i
);
74 public void saveModel() throws IOException
{
75 System
.out
.println("Saving model...");
76 PrintWriter pw
= new PrintWriter(new FileWriter("file.graph"));
77 pw
.println(vertexes
.size() + "," + edges
.size());
78 for(int i
=0; i
< vertexes
.size(); i
++) {
79 pw
.println(vertexes
.get(i
).getX() +","+ vertexes
.get(i
).getY() +","+ vertexes
.get(i
).getHeight() +","+ vertexes
.get(i
).getWidth() +","+ vertexes
.get(i
).getName());
81 for(int i
=0; i
< edges
.size(); i
++) {
87 public void update(Observable arg0
, Object arg1
) {
88 if(vertexes
.contains(arg0
) || edges
.contains(arg0
)){
95 public void writeToFile(File file
) throws Exception
97 OutputStreamWriter out
= new OutputStreamWriter(new FileOutputStream(file
), "UTF-8");
99 out
.write(vertexes
.size() + " " + edges
.size() + "\r\n");
100 for(int i
=0; i
< vertexes
.size(); i
++)
101 out
.write(vertexes
.get(i
).getX() + " " + vertexes
.get(i
).getY() + " " + vertexes
.get(i
).getWidth() + " " + vertexes
.get(i
).getHeight() +" "+ vertexes
.get(i
).getName() + "\r\n");
102 for(int i
=0; i
< edges
.size(); i
++)
103 out
.write(vertexes
.indexOf(edges
.get(i
).getEdge(true)) + " " + vertexes
.indexOf(edges
.get(i
).getEdge(false)) + "\r\n");
109 private static GraphVertex
[] readVertexes(int count
, Scanner s
)
111 GraphVertex
[] vertexes
= new GraphVertex
[count
];
112 for(int i
=0; i
< count
; i
++)
113 vertexes
[i
] = new GraphVertex(s
);
118 public static GraphModel
fromFile(File file
) throws Exception
120 GraphModel model
= new GraphModel();
121 Scanner scanner
= new Scanner(file
, "UTF-8");
123 int numKnopen
= scanner
.nextInt();
124 int numKanten
= scanner
.nextInt();
127 GraphVertex
[] vertexes
= readVertexes(numKnopen
,scanner
);
129 model
.addEdge(readKanten(scanner
, numKanten
, vertexes
));
130 model
.addGraph(vertexes
);
134 private static GraphEdge
[] readKanten(Scanner scanner
, int numKanten
,
135 GraphVertex
[] vertexes
) {
136 GraphEdge
[] edges
= new GraphEdge
[numKanten
];
137 for (int i
= 0; i
< numKanten
; i
++) {
138 int obj1
= scanner
.nextInt();
139 int obj2
= scanner
.nextInt();
140 edges
[i
] = new GraphEdge(vertexes
[obj1
], vertexes
[obj2
]);
141 if(i
!= (numKanten
-1)){
149 public static GraphModel
fromFile(String fileName
) throws Exception
151 File file
= new File(fileName
);
152 return fromFile(file
);